<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    /* 
    then返回的promise的结果由什么决定
    简单表达: 由then指定的回调执行的结果决定
    详细表达, 分下面3大类, 5小类情况


        1) 抛出错误
        2) 返回失败的promise
        3) 返回成功的promise
        4) 返回其它非promise值
        5) 返回pending的promise


        根据结果状态类型分类
          结果是成功的
          结果是失败的
          结果是pending


        根据返回值类型分
          返回promise  ==> 得到并改为它的状态
          返回非promise  ==> 变为成功状态
          抛出错误   ==> try---catch  => 变为失败状态
    */

    // new Promise(执行器函数)
    new Promise((resolve, reject) => {

      // 延迟一秒后执行
      // setTimeout(() => {
      //   // resolve(1)
      //   // reject(2)
      // }, 1000);

      // 直接执行
      // resolve(3) // 立即成功
      reject(4)  // 立即失败 
    }).then(
      // 成功回调 
      value => {
        console.log('onResolved1', value)
      },
      // 失败回调   
      reason => {
        console.log('onRejected1', reason)
        // 返回的5种类型
        // 1) 抛出错误 => 失败, reason就是抛出的错误
        // throw 5

        // 2) 返回失败的promise => 失败, reason是失败promise的reason
        // return Promise.reject(6)

        // 3) 返回成功的promise => 成功, value是成功promise的value
        return Promise.resolve(7)

        // 4) 返回其它非promise值  => 成功, value是返回值
        // return 8

        // 5) 返回pending的promise  => pending
        // return new Promise(() => {})
      }
    ).then(
      value => {
        console.log('onResolved2', value)
      },
      reason => {
        console.log('onRejected2', reason)
      }
    )
  </script>
</body>

</html>